home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
bbsutil
/
dlx70bbs.zip
/
DLX70SRC.ZIP
/
SCRIPT2A.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-19
|
18KB
|
484 lines
{$debug-}
{$line-}
{$include: 'types.int'}
{$include: 'globals.int'}
{$include: 'utils.int'}
{$include: 'funs.int'}
{$include: 'fs_pkg.int'}
{$include: 'database.int'}
{$include: 'load.int'}
{$include: 'script2a.int'}
IMPLEMENTATION OF script2a;
USES types,globals,utils,funs,fs_pkg,database,load;
{DLX Bulletin Board System V7.0
FREEWARE NOTICE
DLX V7.0 is placed in the public domain by its author, Richard Gillmann.
Anyone who wishes to may run the program, copy it, or modify it for
any purpose, including commercial gain.}
{***INTERFACE TO THE COM_PAX2 ASYNCHRONOUS COMMUNICATIONS PACKAGE***}
{$include: 'com_pax2.int'}
{***Interface to the PASASM assembler utilities package***}
{$include: 'pasasm.int'}
{$include: 'newasm.int'}
var
doseqq [EXTERN]: word;
function kmatch(consts pat,info : lstring) : boolean;
var
i,j,k : integer;
patty,cappy : lstring(screen_cols);
begin
if pat.len=0 then [kmatch:=true; return];
kmatch:=false;
if info.len=0 then return;
ucs(info,cappy);
i:=1; j:=ord(pat.len)+1;
while i<=ord(pat.len) do begin
if pat[i]=' ' then [i:=i+1; cycle];
j:=i+scaneq(ord(pat.len)-i,' ',pat,i);
if j>=ord(pat.len) then [j:=ord(pat.len)+1; break];
patty.len:=wrd(j-i);
movesl(ads pat[i],ads patty[1],patty.len);
k:=positn(patty,cappy,1);
if k=0
then return
else cappy[k]:='x'; {this forbids duplicate key matches}
i:=j+1; j:=ord(pat.len)+1;
end {while};
patty.len:=wrd(j-i);
movesl(ads pat[i],ads patty[1],patty.len);
if positn(patty,cappy,1)=0 then return;
kmatch:=true;
end {kmatch};
procedure bbs2a{consts s : lstring; var str : lstring};
var
i,j,k : integer;
next_state : task;
p,p2,p3 : para;
i4 : integer4;
fl : boolean;
begin
next_state:=succ(q[wx].state);
case q[wx].state of
delete_old:
if s=null then
next_state:=q[wx].return_state
else if number_query(s,1,MAXINT,q[wx].count) then
q[wx].index:=0
else
[display(bad_userid_txt); next_state:=q[wx].return_state];
delete_old2:
[q[wx].index:=q[wx].index+1;
if q[wx].index<=largest_member_number then
[if disk2u(q[wx].index) then
[i4:=date2jd(w^[wx].date_of_call) -
date2jd(q[wx].your.last_called_date);
if ord(i4)>=q[wx].count
then prompt_with(user_delete_txt)
else next_state:=delete_old2]
else
next_state:=delete_old2]
else
next_state:=q[wx].return_state];
delete_old3:
if nagree(s) then
[q[wx].your.active:=' ';
i:=on_line(q[wx].index);
if i>=0 then
[w^[i].state:=stopping; q[i].my.active[1]:=' ']
else
dbp_member(q[wx].index,q[wx].your);
mbx(mailpath,q[wx].your.userid,str); mail_delete(str);
mbx(biopath,q[wx].your.userid,str); mail_delete(str);
number_of_members:=number_of_members-1;
display(user_deleted_txt); next_state:=delete_old2]
else
next_state:=delete_old2;
change_level:
if s=null then
next_state:=q[wx].return_state
else if number_query(s,1,largest_member_number,i) then
[if disk2u(i)
then prompt_with(enter_level_txt)
else [display(bad_userid_txt); next_state:=q[wx].return_state]]
else
[display(bad_userid_txt); next_state:=q[wx].return_state];
change_level2:
if number_query(s,0,9,j) then
[q[wx].your.userlevel[1]:=chr(ord('0')+j);
i:=on_line(ivalue(q[wx].your.userid)); q[wx].index:=j;
if i>=0 then
[q[i].level:=j; q[i].my.userlevel[1]:=chr(ord('0')+j);
notify(i,new_level_txt)]
else
dbp_member(ivalue(q[wx].your.userid),q[wx].your);
display(level_changed_txt); next_state:=q[wx].return_state]
else
[display(bad_level_txt); next_state:=q[wx].return_state];
change_mbx:
[next_state:=q[wx].return_state;
if s<>null then
[if number_query(s,1,largest_member_number,i) then
[if disk2u(i) then
[q[wx].index:=ivalue(q[wx].your.mbx_max);
prompt_with(mbx_size_txt); next_state:=change_mbx2]
else
display(bad_userid_txt)]
else
display(bad_userid_txt)]];
change_mbx2:
[next_state:=q[wx].return_state;
if number_query(s,0,999,q[wx].index) and then
encode(str,q[wx].index:3) then
[kopystr(str,q[wx].your.mbx_max);
i:=on_line(ivalue(q[wx].your.userid));
if i>=0
then kopystr(str,q[i].my.mbx_max)
else dbp_member(ivalue(q[wx].your.userid),q[wx].your);
display(size_changed_txt)]
else
display(bad_size_txt)];
kill_line:
if number_query(s,0,number_of_lines,q[wx].index) and then
w^[q[wx].index].active then
prompt_with(line_kill_txt)
else
[display(bad_line_txt); next_state:=main_menu];
kill_line2:
[next_state:=main_menu;
if agree(s) then
[if w^[q[wx].index].state=going then
[w^[q[wx].index].state:=stopping;
i:=w^[q[wx].index].chat;
if i>=0 then w^[i].chat:=-1;
w^[q[wx].index].chat:=-1;
display(line_killed_txt)]
else if q[wx].index>0 then {modem line}
[select_port(q[wx].index); dtr_off;
if wx>0 then select_port(wx);
w^[q[wx].index].reset_count:=0;
if w^[q[wx].index].talking_to = cls
then w^[q[wx].index].talking_to:=modem
else w^[q[wx].index].talking_to:=SUCC(w^[q[wx].index].talking_to);
display(line_killed_txt)]]];
recycle:
if number_query(s,1,largest_member_number,q[wx].index) then
[last_new_user:=q[wx].index-1;
display(good_recycle_txt); next_state:=main_menu]
else
[display(bad_recycle_txt); next_state:=main_menu];
reset_time:
[next_state:=q[wx].return_state;
if s<>null then
[if number_query(s,1,largest_member_number,i) and then disk2u(i)
then [prompt_with(reset_really_txt); next_state:=reset_time2]
else display(bad_userid_txt)]];
reset_time2:
[fl:=false; next_state:=q[wx].return_state;
if agree(s) then
[copystr('0',q[wx].your.minutes_today); fl:=true];
if fl then
[i:=ivalue(q[wx].your.userid);
j:=on_line(i);
if j>=0 then
[w^[j].connect_sec0:=jt; q[j].minutes_on:=0;
copystr('0',q[j].my.minutes_today); q[j].minutes_2day:=0]
else
dbp_member(i,q[wx].your);
display(time_reset_txt)]];
unans1:
if s=null then
next_state:=main_menu
else if number_query(s,1,largest_member_number,i) then
[if disk2u(i)
then prompt_with(enter_multiple_txt)
else [display(bad_userid_txt); next_state:=main_menu]]
else
[display(bad_userid_txt); next_state:=main_menu];
unans2:
if number_query(s,1,number_of_qaires,j) then
[for k:=1 to number_of_answers do q[wx].your.mult_answer[j][k]:=' ';
if j=1 then q[wx].your.mult_answer[1][1]:='Z';
i:=on_line(ivalue(q[wx].your.userid)); q[wx].index:=j;
if i>=0 then
[for k:=1 to number_of_answers do q[i].my.mult_answer[j][k]:=' ';
if j=1 then q[i].my.mult_answer[1][1]:='Z']
else
dbp_member(ivalue(q[wx].your.userid),q[wx].your);
display(qaire_cleared_txt); next_state:=main_menu]
else
[display(bad_multiple_txt); next_state:=main_menu];
down1:
[if number_query(s,1,1440,i) then
[doseqq:=1; shut_down(i)];
next_state:=main_menu];
answer:
[if q[wx].level>=priv_bio
then display(reans_essay_txt);
q[wx].qr:=1];
answer2:
[if qair[q[wx].qr]<>nil and then
((q[wx].level=9) or (q[wx].my.mult_answer[q[wx].qr][1]<>' '))
then display(reans_mult_txt);
q[wx].qr:=q[wx].qr+1;
if q[wx].qr<=number_of_qaires then next_state:=answer2];
answer3:
prompt_with(arrow_txt);
answer4:
[if str=null or else str[1]=mn[14][2] {Q} then
next_state:=main_menu
else if str[1]=mn[14][3] {M} then
[display(qaire_header_txt); next_state:=questionnaire]
else if str[1]=mn[14][4] {E} then
[if q[wx].l